<?php

/*
 * Classe Abstraite des Codes d'activités
 *
 * Code/AbstractCode.php
 */

namespace RHX\Model\Code;

abstract class AbstractCode {

    // Type de Pause et Repas
    const AUCUN		 = 0;
    const OBLIGATOIRE	 = 1;
    const OPTIONNEL	 = 2;

    // Type de maximum
    const PASDELIMITE = 0;

    // Type de Décompte
    const NONPAYE		 = 0;
    const PAYE		 = 1;
    const PAYEDISPO	 = 2;

    /**
     *
     * @var int Identifiant
     */
    public $id;

    /**
     *
     * @var string Code
     */
    public $code;

    /**
     *
     * @var string Libellé
     */
    public $libelle;

    /**
     *
     * @var int type de pause
     */
    public $pause;

    /**
     *
     * @var int type de repas
     */
    public $repas;

    /**
     *
     * @var int maximum d'occurence pour une semaine
     */
    public $maximum;

    /**
     *
     * @var int type de décompte
     */
    public $decompte;

    /**
     *
     * @var int valeur de l'ancienneté où le code est valable
     */
    public $anciennete;

    /**
     *
     * @var string heure d'entrée par défaut
     */
    public $entree;

    /**
     *
     * @var string heure de sortie par défaut
     */
    public $sortie;

    abstract public function calcul($entree, $sortie, $pause, $repas, $taux, $coef, $refEntree, $refSortie, $param = array());

    /**
     * Constructeur de la classe
     * 
     * @param array $data
     */
    public function __construct($data = array()) {
	$this->exchangeArray($data);
    }

    /**
     * Remplissage des données de la classe
     *
     * @param array $data
     */
    public function exchangeArray($data = array()) {
	$this->id		 = isset($data['id']) ? (int) $data['id'] : 0;
	$this->code		 = isset($data['code']) ? $data['code'] : '';
	$this->libelle		 = isset($data['libelle']) ? $data['libelle'] : '';
	$this->pause		 = isset($data['pause']) ? (int) $data['pause'] : self::OPTIONNEL;
	$this->repas		 = isset($data['repas']) ? (int) $data['repas'] : self::OPTIONNEL;
	$this->maximum		 = isset($data['maximum']) ? (int) $data['maximum'] : self::PASDELIMITE;
	$this->anciennete	 = isset($data['anciennete']) ? (int) $data['anciennete'] : self::PASDELIMITE;
	$this->decompte		 = isset($data['decompte']) ? (int) $data['decompte'] : self::NONPAYE;
	$this->entree		 = isset($data['entree']) ? $data['entree'] : '00:00';
	$this->sortie		 = isset($data['sortie']) ? $data['sortie'] : '00:00';
    }

    /**
     * Nom de la classe
     * 
     * @return string
     */
    public function getClassName() {
	return get_class($this);
    }

}

?>
